package com.yu.yupicture.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yu.yupicture.common.DeleteRequest;
import com.yu.yupicture.model.domain.dto.user.*;
import com.yu.yupicture.model.domain.entry.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yu.yupicture.model.domain.vo.UserLoginVo;
import com.yu.yupicture.model.domain.vo.UserVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
* @author Li Shuokang
* @description 针对表【user(用户)】的数据库操作Service
* @createDate 2025-07-29 15:33:14
*/
public interface UserService extends IService<User> {

    /**
     * 用户注册
     * @param userRegistDto
     * @return
     */
    Long userRegister(userRegistDto userRegistDto);

    /**
     * 获取加密密码
     * @param password
     * @return
     */
    String getEncryptPassword(String password);

    UserLoginVo getSafeUser(User user);

    /**
     * 用户登录
     * @param userLoginDto
     * @return
     */

    UserLoginVo userLogin(UserLoginDto userLoginDto, HttpServletRequest request);

    /**
     * 获取当前登录用户信息
     * @param request
     * @return
     */
    User getLoginUser(HttpServletRequest request);

    /**
     * 退出登录
     * @param request
     * @return
     */
    boolean logout(HttpServletRequest request);

    /**
     * 创建用户（管理员）
     * @param userAddRequest
     * @return
     */
    Long  addUser(UserAddRequest userAddRequest);

    /**
     * 删除用户（管理员）
     * @param deleteRequest
     * @return
     */
    boolean  deleteUser(DeleteRequest deleteRequest);

    /**
     * 根据id获取用户(脱敏)
     * @param id
     * @return
     */
    UserVo getUserVo(Long id);

    /**
     * 根据用户信息获取用户（脱敏）
     * @param user
     * @return
     */
    UserVo getUserVo(User user);

    /**
     * 获取脱敏用户列表
     * @param
     * @return
     */
    List<UserVo> getListUserVo(List<User> list);

    /**
     * 根据id获取用户(未脱敏)
     * @param id
     * @return
     */
    User getUser(Long id);

    /**
     * 更新用户信息
     * @param userUpdateRequest
     * @return
     */
    boolean updateUser(UserUpdateRequest userUpdateRequest);

    /**
     * 获取查询包装类
     * @param userQueryRequest
     * @return
     */
    QueryWrapper<User> getQueryWrapper(UserQueryRequest userQueryRequest);

    /**
     * 分页获取用户列表(管理员)
     * @param userQueryRequest
     * @return
     */
    Page<UserVo> listUserVoByPage(UserQueryRequest userQueryRequest);

}
